﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Negocio;
using Entidades;

namespace Precentacion1
{
    public partial class FormVender2 : Form
    {
        public const int tipoDeCuotaMensual = 1;
        public const int tipoDeCuotas = 0;
        public const int tipoDeVentaContado = 0;
        public const int tipoDeVentaEnCuotas = 1;

        public FormVender2()
        {
            InitializeComponent();
            cargarClientes();
            cargarProductos();
            this.comboBoxCantCuotas.Enabled = false;
            this.comboBoxTipoDeCuotas.Enabled = false;
            this.textBoxAnticipo.Enabled = false;
            this.textBoxValorCuota.Enabled = false;
        }


        public void cargarProductos()
        {
            DataGridViewCheckBoxColumn ColCheckBox = new DataGridViewCheckBoxColumn();
            {

                ColCheckBox.HeaderText = "Vender";
                ColCheckBox.Name = "Vender";
                //ColCheckBox.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
                //ColCheckBox.FlatStyle = FlatStyle.Standard;
               // ColCheckBox.ThreeState = true;
                ColCheckBox.TrueValue = 1;
                ColCheckBox.FalseValue = 0;
                //ColCheckBox.CellTemplate = new DataGridViewCheckBoxCell();
                //ColCheckBox.CellTemplate.Style.BackColor = Color.Beige;
                
            }
            
            dataGridViewProductos.Columns.Insert(0, ColCheckBox);
            this.dataGridViewProductos.DataSource = admProductos.BuscarProductosParaVender("", "", "");
            ConfigurarDataGridViewdDeProductos(dataGridViewProductos);
            dataGridViewProductos.Columns["Monto"].Visible = false;
           
        }

        private void ConfigurarDataGridViewdDeProductos(DataGridView dataGridViewProductos)
        {
            dataGridViewProductos.MultiSelect = false;
            dataGridViewProductos.SelectionMode = DataGridViewSelectionMode.CellSelect;
            dataGridViewProductos.RowHeadersVisible = false;
            dataGridViewProductos.AllowUserToResizeRows = false;
            dataGridViewProductos.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            dataGridViewProductos.AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue;
            dataGridViewProductos.Columns["NombreProducto"].ReadOnly = true;
            dataGridViewProductos.Columns["Marca"].ReadOnly = true;
            dataGridViewProductos.Columns["Modelo"].ReadOnly = true;
            dataGridViewProductos.Columns["cantidad"].ReadOnly = false;
            dataGridViewProductos.Columns["Descripcion"].ReadOnly = true;
            dataGridViewProductos.Columns["Precio"].ReadOnly = true;
            dataGridViewProductos.Columns["CodigoProducto"].ReadOnly = true;
            dataGridViewProductos.Columns["cantidad"].Visible = true;

            dataGridViewProductos.Columns["Descripcion"].Visible = false;
        }
        private void ConfigurarDataGridView(DataGridView paramDataGridView)
        {
            paramDataGridView.ReadOnly = true;
            paramDataGridView.MultiSelect = false;
            paramDataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            paramDataGridView.RowHeadersVisible = false;
            paramDataGridView.AllowUserToResizeRows = false;
            paramDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            paramDataGridView.AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue;
        }

        public void cargarClientes()
        {
            this.ConfigurarDataGridView(this.dataGridViewClientes);
            this.dataGridViewClientes.DataSource = admClientes.BuscaClientes("", "", "");
            this.dataGridViewClientes.Columns["NombreCompleto"].Visible = false;
            this.dataGridViewClientes.Columns["Id"].Visible = false;
        }
        void dataGridViewProductos_CurrentCellDirtyStateChanged(object sender, EventArgs e)
        {
            if (dataGridViewProductos.IsCurrentCellDirty)
            {
                dataGridViewProductos.CommitEdit(DataGridViewDataErrorContexts.Commit);
            }
        }
        public void dataGridViewProductos_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            //if (dataGridViewProductos.Columns[0].Name == "Vender")
            //{
            List<Producto> lstProductos = new List<Producto>();
            foreach (DataGridViewRow row in this.dataGridViewProductos.Rows)
            {
                decimal precio;
                int cantidad;
                //    Producto objProducto = new Producto(objReader["varNombreProducto"].ToString(), objReader["varMarca"].ToString(), objReader["varModelo"].ToString(), Convert.ToDecimal(objReader["decPrecio"]), 1, (objReader["varDescripcion"]).ToString(), Convert.ToInt32(objReader["intCodProducto"]));
                if (Convert.ToInt32(row.Cells["Vender"].Value) == 1)
                {
                    cantidad = Convert.ToInt32(row.Cells["Cantidad"].Value);
                     precio =  Convert.ToDecimal(row.Cells["Precio"].Value);
                    Producto objProducto = new Producto((row.Cells["NombreProducto"].Value).ToString(), (row.Cells["Marca"].Value).ToString(), (row.Cells["Modelo"].Value).ToString(),precio, cantidad, (row.Cells["Descripcion"].Value).ToString(), Convert.ToInt32(row.Cells["CodigoProducto"].Value),precio * cantidad);
                    lstProductos.Add(objProducto);
                }

            }

            this.dataGridViewPreVenta.DataSource = lstProductos;
            ConfigurarDataGridViewdDeProductos(dataGridViewPreVenta);
            dataGridViewPreVenta.Columns["cantidad"].ReadOnly = true;
            dataGridViewPreVenta.MultiSelect = false;
            dataGridViewPreVenta.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
               
          //  }
        }


        private void splitContainer1_Panel1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void panel4_Paint(object sender, PaintEventArgs e)
        {

        }

        private void FormVender2_Load(object sender, EventArgs e)
        {

        }


        public int calcularTotal(DataGridView datagrid)
        {
            int total;
            total = 0;


            foreach (DataGridViewRow ROW in datagrid.Rows)
            {
              
              total = total + Convert.ToInt32(ROW.Cells["Monto"].Value);
                
            }

            return total;

       }
        private void buttonConsultar_Click(object sender, EventArgs e)
        {
            if (this.dataGridViewPreVenta.RowCount == 0)
            {
                MessageBox.Show("Debe seleccionar al menos un producto");
                return;
            }
           

            this.textBoxTotal.Text = calcularTotal(this.dataGridViewPreVenta).ToString();
            decimal precioContado = Convert.ToInt32(this.textBoxTotal.Text);

            if (this.textBoxAnticipo.Text == "" || this.textBoxAnticipo.Text == "Anticipo" || Convert.ToDecimal(this.textBoxAnticipo.Text) > precioContado)
            {
                MessageBox.Show("Ingrese un valor valido en el campo Anticipo");

            }
            else
            {
                decimal anticipo = Convert.ToDecimal(this.textBoxAnticipo.Text);
                decimal valorDeCuota;
                decimal valorCuotaConDescuento = precioContado - anticipo;
                int reng;
                int led;
                List<CuotasMensuales> listCuotasMensuales = new List<CuotasMensuales>();
                List<cuotasSemanales> listCuotasSemanales = new List<cuotasSemanales>();

                for (reng = 1; reng <= 12; reng++)
                {
                    if (reng == 1)
                    {
                        valorDeCuota = Math.Round(valorCuotaConDescuento, 2);
                        CuotasMensuales objMensual = new CuotasMensuales(reng, valorDeCuota);
                        listCuotasMensuales.Add(objMensual);
                    }
                    if (reng == 2)
                    {

                        valorDeCuota = Math.Round(valorCuotaConDescuento / 2, 2);
                        CuotasMensuales objMensual = new CuotasMensuales(reng, valorDeCuota);
                        listCuotasMensuales.Add(objMensual);

                    }
                    if (reng == 3)
                    {
                        valorDeCuota = Math.Round((valorCuotaConDescuento * Convert.ToDecimal(1.05)) / 3);
                        CuotasMensuales objMensual = new CuotasMensuales(reng, valorDeCuota);
                        listCuotasMensuales.Add(objMensual);
                    }
                    if (reng != 3 & reng != 1 & reng != 2)
                    {
                        valorDeCuota = Math.Round((valorCuotaConDescuento * Convert.ToDecimal((reng * 0.05) + 1)) / reng, 2);
                        CuotasMensuales objMensual = new CuotasMensuales(reng, valorDeCuota);
                        listCuotasMensuales.Add(objMensual);
                    }
                }
                for (led = 1; led <= 8; led++)
                {
                    if (led == 1 || led == 2 || led == 3 || led == 4)
                    {
                        cuotasSemanales objSemanal = new cuotasSemanales(led, Math.Round(valorCuotaConDescuento / led, 2));
                        listCuotasSemanales.Add(objSemanal);
                    }
                    else
                    {
                        cuotasSemanales objSemanal = new cuotasSemanales(led, Math.Round(valorCuotaConDescuento * Convert.ToDecimal(1.05) / led, 2));
                        listCuotasSemanales.Add(objSemanal);
                    }


                }
                this.dataGridViewSemanales.DataSource = listCuotasSemanales;
                this.dataGridViewCuotasMensuales.DataSource = listCuotasMensuales;

            }
        }

        private void buttonVender_Click(object sender, EventArgs e)
        {
            if (this.dataGridViewPreVenta.RowCount == 0)
            {
                MessageBox.Show("Debe seleccionar al menos un producto");
                return;
            }
           
            int precioPorUnidad;
            int codProducto;
          //  int? NroFactra;
            string dni;
            int? idCliente;
            int cantidad;
            DateTime fechaVenta;
            idCliente = Convert.ToInt32(this.dataGridViewClientes.SelectedRows[0].Cells["Id"].Value);
            fechaVenta = dateTimePickerFechaVenta.Value;


            if (this.comboBoxModoDePago.SelectedItem.ToString() == "Contado")
            {
                if (MessageBox.Show("Confirma la venta", Application.ProductName, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                {
                    admVentas.InsertarVentaAlContado(idCliente, fechaVenta);

                    foreach (DataGridViewRow row in this.dataGridViewPreVenta.Rows)
                    {
                        admVentas.InsertarProductosVendidosAlContado(Convert.ToInt32(row.Cells["CodigoProducto"].Value), Convert.ToInt32(row.Cells["Cantidad"].Value), Convert.ToDecimal(row.Cells["Precio"].Value));
                    }
                    MessageBox.Show("Se realizo la venta correctamente");
                }
             }

            if (this.comboBoxModoDePago.SelectedItem.ToString() == "Cuotas")
            {
                int idTipoCuota ;
                if(this.comboBoxTipoDeCuotas.SelectedItem.ToString() == "Cuotas Mensuales")
                    idTipoCuota = 1;
                else 
                    idTipoCuota = 0;

                if (this.textBoxAnticipo.Text == string.Empty)
                {
                    MessageBox.Show("Debe ingresar un Anticipo");
                    return;
                }
                if (this.textBoxValorCuota.Text == string.Empty)
                {
                    MessageBox.Show("Debe un ingresar el valor de la cuota");
                    return;
                }
            
             

                if (MessageBox.Show("Confirma la venta?", /*Application.ProductName*/"Confirmar Venta", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                {
                    admVentas.InsertarVentaEnCuotas(idCliente, Convert.ToInt32(this.comboBoxCantCuotas.SelectedItem), Convert.ToDecimal(this.textBoxAnticipo.Text),idTipoCuota,dateTimePickerFechaVenta.Value,Convert.ToDecimal(this.textBoxValorCuota.Text));
                    

                    foreach (DataGridViewRow row in this.dataGridViewPreVenta.Rows)
                    {
                       // admVentas.RealizarVentaEnCuotas(Convert.ToInt32(row.Cells["CodigoProducto"].Value), Convert.ToInt32(row.Cells["Cantidad"].Value), Convert.ToDecimal(row.Cells["Precio"].Value), idCliente);
                        admVentas.InsertarProductosVendidosEnCuotas(Convert.ToInt32(row.Cells["CodigoProducto"].Value), Convert.ToInt32(row.Cells["Cantidad"].Value), Convert.ToDecimal(row.Cells["Precio"].Value));
                        //if (row.Selected == true)
                        //{
                        //    precioPorUnidad = Convert.ToInt32(row.Cells["Precio"].Value);
                        //    codProducto = Convert.ToInt32(row.Cells["CodigoProducto"].Value);
                        //   // NroFactra = null;
                        //    dni = row.Cells["CodigoProducto"].Value.ToString();
                        //    cantidad = 1;
                        //    admVentas.RealizarVenta(idCliente,codProducto,dateTimePickerFechaVenta.Value,tipoDeVentaEnCuotas,cantidad,precioPorUnidad);
                        //    //admVentas.RegistrarVenta(dateTimePickerFechaVenta.Value, precioPorUnidad, codProducto, 1, NroFactra, dni, "Contado", -1, -1, -1, "", -1);
                        //}
                    }
                   // admVentas.RegistrarVenta(dateTimePickerFechaVenta.Value, Convert.ToDecimal(this.textBoxPrecioContado.Text), Convert.ToInt32(this.textBoxCodProd.Text), 1, this.textBoxNroFactura.Text, this.textBoxDni.Text, "Cuotas", Convert.ToDecimal(this.textBoxAnticipo.Text), Convert.ToInt32(this.comboBoxCantCuotas.SelectedItem), 2, this.comboBoxTipoDeCuotas.SelectedItem.ToString(), Convert.ToDecimal(this.textBoxValorCuota.Text));
                    MessageBox.Show("Se realizo la venta correctamente");
                }
            }
        }

        private void comboBoxModoDePago_SelectedIndexChanged(object sender, EventArgs e)
        {
       
            if (this.comboBoxModoDePago.SelectedItem.ToString() == "Cuotas")
            {
                this.comboBoxTipoDeCuotas.Enabled = true;
                this.comboBoxCantCuotas.Enabled = true;
                this.textBoxAnticipo.Enabled = true;
                this.textBoxValorCuota.Enabled = true;
                //this.comboBoxCantProductos.SelectedItem = Convert.ToInt32("1");

            }
            if(this.comboBoxModoDePago.SelectedItem.ToString() == "Contado")
            {
                this.comboBoxTipoDeCuotas.Enabled = false;
                this.comboBoxCantCuotas.Enabled = false;
                this.textBoxAnticipo.Enabled = false;
                this.textBoxValorCuota.Enabled = false;
            }
        }

        private void panel5_Paint(object sender, PaintEventArgs e)
        {

        }



        
    }
}
